package cn.wizzer.app.user.modules.services;

import cn.wizzer.app.user.modules.models.GroupInfo;
import cn.wizzer.framework.base.service.BaseService;
import cn.wizzer.framework.page.Pagination;


public interface GroupInfoService extends BaseService<GroupInfo> {

    /**
     * 前端群聊列表(显示最后一条群聊消息和群人数)
     *
     * @param userId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Pagination list(String userId, int pageNumber, int pageSize);

    /**
     * 后台查询群列表
     *
     * @param pageNumber
     * @param pageSize
     * @param searchKeyword 搜索关键字
     * @param isOpen        是否是内部群
     * @return
     */
    Pagination listPage(int pageNumber, int pageSize, String searchKeyword, Boolean isOpen, Boolean isPub);


    /**
     * 查询未入该群用户
     *
     * @param pageNumber
     * @param pageSize
     * @param groupId
     * @param searchKeyword
     * @return
     */
    Pagination memberList(int pageNumber, int pageSize, String groupId, String searchKeyword);


    /**
     * 编辑群
     *
     * @param groupInfo
     */
    void edit(GroupInfo groupInfo, String opBy);


    /**
     * 添加群
     *
     * @param groupInfo
     */
    void add(GroupInfo groupInfo);

    /**
     * 删群，同时删除群成员，群消息，以及清空redis
     *
     * @param id
     */
    void delGroup(String id);

    /**
     * 可申请群列表(不包括该用户的公开的群)
     *
     * @param appid
     */
    Pagination applyList(String appid, int pageNumber, int pageSize);


    /**
     * 创建私聊
     *
     * @param appid     创建人id
     * @param userId    被私聊人id
     * @param masterId  私聊群群主id是固定字符串
     * @return 群信息
     */
    GroupInfo privateChat(String appid, String userId, String masterId);

    /**
     * 判断两个用户是否已经有私聊群(是1否0)
     *
     * @param appid  创建人id
     * @param userId 被私聊人id
     * @return 群信息
     */
    GroupInfo onPrivateChat(String appid, String userId);


    /**
     * 用户找在线客服（把用户和客服拉到一个私聊群中）
     *
     * @return 群信息
     * @param userId
     */
    GroupInfo onlineAttendant(String userId);


    /**
     * 判断用户是否与客服创建过私聊
     *
     * @param userId 用户UserId
     * @return
     */
    GroupInfo onAttendantChat(String userId);


    /**
     * 客服移交客服
     *
     * @param groupId       私聊群id
     * @param appid         当前客服userId
     * @param attendantId   要移交客服userId
     */
    void transferAttendant(String groupId, String appid, String attendantId);
}
